package paim.wingchun.app;


import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.logging.Level;

/* System.getProperty("user.dir"); */
/* System.getProperty("user.home"); */
/* System.getProperty("file.separator"); */
public class WC_Properties {

    private static final String WCApp$Properties = "/wingchun.properties";

    /** constante basica para localizar de toda estrutura da aplicacao */
    public static final String App$Properties = "/aplicacao.properties";

    private static Properties properties;

    /** identifica as properties do wc e da aplicacao, necessarias para o frame wc trabalhar
     * 
     * @author paim 05/05/2011
     * @throws Exception
     *             void */
    public static void verificaPropertiesApp() throws Exception {
        if ( properties != null )
            throw new Exception("properties jah foi identificado");

        InputStream isWCApp = WC_Properties.class.getResourceAsStream(WCApp$Properties);
        InputStream isApp = WC_Properties.class.getResourceAsStream(App$Properties);

        if ( isWCApp == null ) {
            throw new Exception("PANE: Nao foi possível localizar o arquivo: " + WCApp$Properties);
        }
        else if ( isApp == null ) {
            throw new Exception("PANE: Nao foi possível localizar o arquivo: " + App$Properties);
        }

        /* declarando novo properties */
        Properties p = new Properties();
        /* carregando do wc */
        p.load(isWCApp);
        properties = p;
        System.out.println("OK. Propriedades carregadas do arquivo: " + WCApp$Properties);

        /* carregando da app */
        properties.load(isApp);
        System.out.println("OK. Propriedades carregadas do arquivo: " + App$Properties);
    }

    /** properties com direito a log */
    public static Properties getProperties() {
        if ( properties != null )
            return properties;

        properties = load(App$Properties, WC_Properties.class);
        properties.putAll(load(WCApp$Properties, WC_Properties.class));
        return properties;
    }

    /** carrega properties de um arquivo
     *
     * @author paim 04/05/2011
     * @param path
     * @param clazz
     * @return {@link Properties} Properties */
    public static Properties load(String path, Class<?> clazz) {
        Properties p = new Properties();

        InputStream in = clazz.getResourceAsStream(path);
        try {
            if ( in != null ) {
                p.load(in);
                /* log pode nao estar disponivel nesse momento */
                WC_Log.getInstancia().getlogger().log(Level.INFO, "Propriedades carregadas do arquivo: " + path);
            }
            else
                WC_Log.getInstancia().getlogger().log(Level.WARNING, "Nao foi possível localizar o arquivo: " + path);
        }
        catch ( IOException ioe ) {
            WC_Log.getInstancia().getlogger().log(Level.SEVERE, ioe.getMessage(), ioe);
        }
        return p;
    }

    static Properties load(String path) {
        Properties p = new Properties();

        InputStream in = WC_Properties.class.getResourceAsStream(path);
        try {
            if ( in != null ) {
                p.load(in);
                /* log pode nao estar disponivel nesse momento */
                System.out.println("OK. Propriedades carregadas do arquivo: " + path);
            }
            else
                System.out.println("Nao foi possível localizar o arquivo: " + path);
        }
        catch ( IOException ioe ) {

        }
        return p;
    }

    public static void save() {}

    /** se nao encontrar a chave, retorna string vazia
     *
     * @author paim 10/05/2011
     * @param key
     * @return String */
    public static String getProperty(String key) {
        return getProperties().getProperty(key, "");
    }

    /** @see java.util.Properties#getProperty(String key, String defaultValue) */
    public static String getProperty(String key, String defaultValue) {
        return getProperties().getProperty(key, defaultValue);
    }
}
